package org.wjk.config;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.wjk.props.JedisPoolProperties;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/*配置类*/
@Configuration
//@NoArgsConstructor//无参构造
//@AllArgsConstructor//全参构造 lombok提供
@RequiredArgsConstructor//生成含参构造 lombok提供 使用该注解时，所有属性需要声明为final
@Slf4j
public class JedisConfig {
    //@Autowired /*如果该类有且只有一个构造函数，该构造函数默认由@Autowired描述，spring推荐使用@Autowired依赖注入时推荐使用构造方法注入*/
    private final JedisPoolProperties props;

    @Bean//描述方法，要用在配置类，返回的对象交给spring管理
    public JedisPool jedisPool(){
        log.debug("jedis连接池属性为{}",props);
        /*第一步创建jedisPoolConfig*/
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(props.getMaxIdle());
        jedisPoolConfig.setMaxTotal(props.getTotalIdle());
        jedisPoolConfig.setMinIdle(props.getMinIdle());
        String host=props.getAddress().split(":")[0];
        int port=Integer.parseInt(props.getAddress().split(":")[1]);
        return new JedisPool(jedisPoolConfig,host,port);
    }
}
